package org.springblade.modules.system.vo.config;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import org.springblade.modules.system.enums.DayType;

import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;

/**
 * @Author ysq
 * @Date 2025/07/09
 * @Description 自动报警设置
 */
@JsonIgnoreProperties(ignoreUnknown = true) // 允许反序列化时忽略未知字段
@Data
public class AlarmConfig {

	/**
	 * 梯联网报警配置
	 */
	@Valid
	private TlwAlarm tlwAlarm = new TlwAlarm();

	/**
	 * AI客服报警配置
	 */
	@Valid
	private AiServiceAlarm aiServiceAlarm = new AiServiceAlarm();

	/**
	 * 重复报警通知配置
	 */
	@Valid
	private AlarmDeduplicationNotice alarmDeduplication = new AlarmDeduplicationNotice();


	@Data
	public static class TlwAlarm {
		/**
		 * 是否启用
		 */
		private boolean enabled;
		/**
		 * 时间段
		 */
		@Valid
		private List<Period> periods;
	}

	@Data
	public static class AiServiceAlarm {
		/**
		 * 是否启用
		 */
		private boolean enabled;
		/**
		 * 分钟数，默认2分钟
		 */
		@NotNull(message = "会话超时时间未设置")
		@Min(value = 1, message = "会话超时时间不能小于1分钟")
		private Integer conversationTimeout = 2;
		/**
		 * 时间段
		 */
		@Valid
		private List<Period> periods;
	}

	@Data
	public static class Period {
		/**
		 * 当日 或 次日
		 */
		private DayType startDayType = DayType.当日;

		@Pattern(regexp = "^([01]\\d|2[0-3]):[0-5]\\d$", message = "开始时间格式为(00:00-23:59)")
		private String start;

		/**
		 * 当日 或 次日
		 */
		private DayType endDayType = DayType.当日;

		@Pattern(regexp = "^([01]\\d|2[0-3]):[0-5]\\d$", message = "结束时间格式为(00:00-23:59)")
		private String end;
	}

	@Data
	public static class AlarmDeduplicationNotice {

		/**
		 * 是否启用
		 */
		private boolean enabled = true;

		/**
		 * 时间窗口 (分钟)
		 */
		@Min(value = 1, message = "时间窗口不能小于1分钟")
		@Max(value = 1440, message = "时间窗口不能大于24小时")
		private Integer timeWindowMinutes = 3;
	}
}
